/**
 * 文件名    ： Byte2String.java
 * 版权       : XX科技有限公司。
 * 描述       : <描述>
 * 修改时间：2019年2月18日
 * 修改内容：<修改内容>
 */
package com.example.demo.application.common.encrypt;

import org.apache.commons.lang3.StringUtils;

public class Byte2String {

	/**
	 * 将byte[]字节数组转换成字符串 (16进制)
	 * 
	 * @param b 字节数组
	 * @return 字符串
	 */
	public static String byteArrayToHexString(byte[] b) {
		StringBuilder hs = new StringBuilder();
		String stmp;
		for (int n = 0; b != null && n < b.length; n++) {
			stmp = Integer.toHexString(b[n] & 0XFF);
			if (stmp.length() == 1)
				hs.append('0');
			hs.append(stmp);
		}
		return hs.toString().toLowerCase();
	}

	/**
	 * 将字符串转换成byte[]字节数组 (16进制)
	 * 
	 * @param b 字节数组
	 * @return 字符串
	 */
	public static byte[] hexStringToByteArray(String hexString) {

		if (StringUtils.isEmpty(hexString))
			throw new IllegalArgumentException("this hexString must not be empty");

		hexString = hexString.toLowerCase();
		final byte[] byteArray = new byte[hexString.length() / 2];
		int k = 0;
		for (int i = 0; i < byteArray.length; i++) {// 因为是16进制，最多只会占用4位，转换成字节需要两个16进制的字符，高位在先
			byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);
			byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);
			byteArray[i] = (byte) (high << 4 | low);
			k += 2;
		}
		return byteArray;
	}
	
}
